由於以巴戰爭的新聞
我們來寫一下 新聞閱讀器
咒語:創建一個新聞閱讀器頁面,使用 Material-UI 的標簽、卡片和按鈕組件,讓用戶瀏覽不同主題的新聞文章 文章內容需要簡單描述一下 並且根據tab的篩選篩選內容
import React, { useState } from "react";
import { AppBar, Container, Paper, Tabs, Tab, Typography } from "@mui/material";
const newsData = [
{
id: 1,
category: "科技",
title: "新科技改變我們的生活",
content: "介紹了新科技對生活的影響和未來趨勢。"
},
{
id: 2,
category: "體育",
title: "足球比賽結果",
content: "關於最新一場足球比賽的報道和比分。"
},
{
id: 3,
category: "政治",
title: "國家政策更新",
content: "最新的國家政策變化和其影響。"
},
{
id: 4,
category: "娛樂",
title: "新電影上映",
content: "一部備受期待的電影即將上映,詳細介紹。"
}
];
function NewsReader() {
const [selectedTab, setSelectedTab] = useState(0);
const [selectedNews, setSelectedNews] = useState(null);
const handleChange = (event, newValue) => {
setSelectedTab(newValue);
setSelectedNews(null); // 清空已選擇的新聞
};
const handleNewsClick = (newsId) => {
const news = newsData.find((news) => news.id === newsId);
setSelectedNews(news);
};
const filteredNews = newsData.filter(
(news) =>
selectedTab === 0 || // 如果 selectedTab 是 0,不進行篩選
news.category === ["全部", "科技", "體育", "政治", "娛樂"][selectedTab]
);
return (
<Container>
<Tabs value={selectedTab} onChange={handleChange}>
<Tab label="全部" />
<Tab label="科技" />
<Tab label="體育" />
<Tab label="政治" />
<Tab label="娛樂" />
</Tabs>
<Paper elevation={3} style={{ padding: "16px", margin: "16px 0" }}>
{selectedNews ? (
<div>
<Typography variant="h4">{selectedNews.title}</Typography>
<Typography variant="body1">{selectedNews.content}</Typography>
</div>
) : (
<Typography variant="h6">請選擇一篇新聞閱讀</Typography>
)}
</Paper>
{filteredNews.map((news) => (
<Paper
key={news.id}
elevation={2}
style={{ padding: "12px", marginBottom: "12px", cursor: "pointer" }}
onClick={() => handleNewsClick(news.id)}
>
<Typography variant="h6">{news.title}</Typography>
<Typography variant="body2">{news.category}</Typography>
</Paper>
))}
</Container>
);
}
export default NewsReader;
發現他沒寫好篩選的邏輯
咒語:const filteredNews = newsData.filter(
(news) =>
news.category === ["全部", "科技", "體育", "政治", "娛樂"][selectedTab]
);selectedTab 是0時 就不filter
const filteredNews = newsData.filter(
(news) =>
selectedTab === 0 || // 如果 selectedTab 是 0,不進行篩選
news.category === ["全部", "科技", "體育", "政治", "娛樂"][selectedTab]
);
這樣簡易的新聞篩選就可以做完了